package com.me.study.javaCore.agent;

import java.lang.instrument.Instrumentation;

/**
 * Java Agent 技术 111：
 * 随 jvm 启动时启动，使用 TransformTarget 测试；  <p>
 *  -javaagent:../testME\testJavaAgent\target/testJavaAgent-my-assembly.jar=thisIsAgentArgs     <p>
 *  -javaagent:D:\workspace\testME\testJavaAgent\target\testJavaAgent-my-assembly.jar=thisIsAgentArgs   <p>
 * java-agent
 *
 * @author ME
 */
public class JavaAgent {

    /**
     * 两个方法互斥，优先级比不带 Instrumentation 的方法高
     */
    public static void premain(String agentArgs, Instrumentation instrumentation) {
        System.out.println("\njavaagent 接收到的参数：" + agentArgs);
        System.out.println();

        MyTransformer transformer = new MyTransformer();
        try {
            instrumentation.addTransformer(transformer, true);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // agent 模式不能移除 instrumentation，否则就不生效了。
            // instrumentation.removeTransformer(transformer);
        }
    }

    /**
     * 优先级低于 上一个方法执行
     */
    public static void premain(String agentArgs) {
        System.out.println("premain");
    }

}
